/*
 * Battle.h
 *
 *  Created on: 2013. 9. 23.
 *      Author: jjaehuny
 */

#ifndef PROJECTZ_NLOGIC_BATTLE_H_
#define PROJECTZ_NLOGIC_BATTLE_H_

#include <stddef.h>
#include <string>
//#include "../constant.h"

namespace ProjectZ {
class User;
} /*ProjectZ*/

namespace ProjectZ { namespace NLogic {

class Battle
{
public:
	struct Data {
		int HP;
		int HP_MAX;
		int SP;
		int SP_MAX;
		bool bUseBoost;

		unsigned int x;
		unsigned int y;
		unsigned int degree;
		unsigned int speed;

		int vehicle_state;
		int ap_this_game;

		int	is_friend;
		int rank;				// 0 : s 1 : aaa 랭크 시스템 에따라서
		int kill_monster_num;	// 처치 몬스터 수
		int combo_max;			// 최대 콤보
		int get_gold;			// 획득 골드량
		int acc_damage;			// 적에게 가한 누적 데미지
		int acc_get_damage;		// 받은 누적 데미지
		int acc_damage_boss_damage;	// 보스에게 가한 피해량 %
		int acc_damage_boss_percent;	// 보스에게 가한 피해량 %
		int exp_rate;			// 현재 레벨 기준 다음레벨업 까지 획득한 경험치 백분율
		int total_get_exp;		// 경험치 총 증가량
		int hunting_exp;		// 사냥 경험치
		int bonus_exp;			// 보너스 경험치
		int exp_option;			// 하위4비트 사용(파티 / 아바타 / 부스터 / 이벤트)
		int clear_second;

		// PK
		int back_attack;
		int first_kill_count;
		int all_kill_count;
		int kill_count;
		int dead_count;
		int attack_point;
		bool _enable_map_clear;
		bool bReadyFight;
		bool bRecvEnterRoom;

		int		_inviteCount;
		bool	_ready_reward; // party dungeon;
		int		_combo_steak;

		// PVP
		int _pvpHP;
		int _pvpMaxHP;
		User * _pvpOppUser;


		// dungeon
		bool _firstReady;

		int userseq;
		int level;
		std::string nickname;
		int ep_max;
		int classtype;
		int ep_current;
		std::string profile_url;
		std::string win_comment;

		bool	isAI;

		int 	_worldBoss_Hited;
		int 	_worldBoss_Point;

		bool	_dungeonReward;
		bool	_pvpReward;
		bool	_pkReward;
		unsigned int rebirthIntervalTime;

	public:
		void Clear()
		{
//			HP = 0;
//			HP_MAX = 0;
//			SP = 0;
//			SP_MAX = 0;
			bUseBoost = false;

			x = 0;
			y = 0;
			degree = 0;
			speed = 0;
			vehicle_state = 0;
			ap_this_game = 0;

			is_friend = 0;
			rank = 0;				// 0 : s 1 : aaa 랭크 시스템 에따라서
			kill_monster_num = 0;	// 처치 몬스터 수
			combo_max = 0;			// 최대 콤보
			get_gold = 0;			// 획득 골드량
			acc_damage = 0;			// 적에게 가한 누적 데미지
			acc_get_damage = 0;		// 받은 누적 데미지
			acc_damage_boss_damage = 0;	// 보스에게 가한 피해량 %
			acc_damage_boss_percent = 0;	// 보스에게 가한 피해량 %
			exp_rate = 0;			// 현재 레벨 기준 다음레벨업 까지 획득한 경험치 백분율
			total_get_exp = 0;		// 경험치 총 증가량
			hunting_exp = 0;		// 사냥 경험치
			bonus_exp = 0;			// 보너스 경험치
			exp_option = 0;			// 하위4비트 사용(파티 / 아바타 / 부스터 / 이벤트)
			clear_second = 0;


			back_attack = 0;
			first_kill_count = 0;
			all_kill_count = 0;
			kill_count = 0;
			dead_count = 0;
			attack_point = 0;
			_enable_map_clear = 0;
			bReadyFight = 0;
			bRecvEnterRoom = 0;

			_inviteCount = 0;
			_ready_reward = 0; // party dungeon = 0;
			_combo_steak = 0;


			_pvpHP = 0;
			_pvpMaxHP = 0;
			_pvpOppUser = NULL;

			_firstReady = true;

			userseq = 0;
			level = 0;
			nickname.clear();
			ep_max = 0;
			classtype = 0;
			ep_current = 0;
			profile_url.clear();
			win_comment.clear();

			isAI = false;

			_worldBoss_Hited = 0;
			_worldBoss_Point = 0;

			_dungeonReward = false;
			_pvpReward = false;
			_pkReward = false;
			rebirthIntervalTime = 0;
		}

	};

public:
	//Battle(User * pUser);
	Battle();
	virtual 	~Battle();

	void Initialize();
	void Finalize();

	Data &		GetData();

	void		SetUser(User * pUser);
	User *		GetUser();

private:
	User *		_user;
	Data 		_data;
};

} /*NLogic*/ } /*ProjectZ*/

#endif /* PROJECTZ_NLOGIC_BATTLE_H_ */
